package com.disapand.strongarmy.vo

import com.disapand.strongarmy.enum.*

/**
 * 一般的数据返回封装类
 *
 * @auth disapand
 * @date 2021/10/12 - 21:54 - 星期二
 * @property    code      Int      状态码
 * @property    message   String   状态信息
 * @property    data      Any?     返回的数据，可以为空
 */
data class ResponseVO(
    val code: Int,
    val message: String,
    val data: Any?
) {

    /**
     * 构造函数
     * @param   responseCode    ResponseCode    状态枚举类
     * @param   data            Any?            返回的数据
     */
    constructor(responseCode: ResponseCode, data: Any?) : this(responseCode.code, responseCode.message, data)

    /**
     * 构造函数
     * @param   responseCode    ResponseCode    状态枚举类
     */
    constructor(responseCode: ResponseCode) : this(responseCode, null)

    companion object {
        /**
         * 无数据返回的请求成功快捷返回方式
         *
         * @return ResponseVO
         */
        fun ofSuccess(): ResponseVO {
            return ResponseVO(ResponseCode.SUCCESS)
        }

        /**
         * 有返回数据的请求成功快捷返回方式
         *
         * @param data
         * @return
         */
        fun ofSuccess(data: Any?): ResponseVO {
            return ResponseVO(ResponseCode.SUCCESS, data)
        }

        /**
         * 无数据返回的请求失败快捷返回方式
         *
         * @return
         */
        fun ofError(): ResponseVO {
            return ResponseVO(ResponseCode.FAIL)
        }

        /**
         * 有返回数据的请求失败快捷返回方式
         *
         * @param data
         * @return
         */
        fun ofError(data: Any?): ResponseVO {
            return ResponseVO(ResponseCode.FAIL, data)
        }
    }
}